package lx5;
/*
            有一个抽奖池,该抽奖池中存放了奖励的金额,该抽奖池中的奖项为 {10,5,20,50,100,200,500,800,2,80,300,700};
            创建两个抽奖箱(线程)设置线程名称分别为“抽奖箱1”，“抽奖箱2”
            随机从抽奖池中获取奖项元素并打印在控制台上,格式如下:
                             每次抽出一个奖项就打印一个(随机)
            	抽奖箱1 又产生了一个 10 元大奖
            	抽奖箱1 又产生了一个 100 元大奖
            	抽奖箱1 又产生了一个 200 元大奖
            	抽奖箱1 又产生了一个 800 元大奖
            	抽奖箱2 又产生了一个 700 元大奖
            	.....
        */

import java.util.ArrayList;
import java.util.Collections;

public class MyThread extends Thread {
    //共享数据
    // 奖励的金额
    ArrayList<Integer> list;

    public MyThread(ArrayList<Integer> list) {
        this.list = list;
    }
/*
我们采用随机抽一个删一个的方法
 */

    @Override
    public void run() {
        //1.循环
        while (true) {

            //同步代码块
            synchronized (MyThread.class) {
                //判断共享数据是否到了末尾（到了末尾）
                if (list.size() == 0) {
                    break;
                } else {
                    //判断共享数据是否到了末尾（还没有到末尾）
                    //随机一个删一个
                    Collections.shuffle(list);
                    int index = list.get(0);
                    System.out.println(getName() + "又产生了一个" + index + "元大奖");

                    list.remove(0);

                }
            }
            /*
            把sleep代码写在锁的外面
            因为当线程1进去了，如果你sleep写在锁里面，导致线程1睡了，线程2就无法进入锁了。
            写在外面，线程1执行完了，锁就开了，线程1睡100ms 线程2就有机会抢到cpu执行权
             */
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
        }

    }
}
